제8장. 안정자 코드와 표면 코드
7장에서 우리는 3큐빗 코드나 9큐빗 쇼어 코드처럼, 논리적 \(|0\rangle_L\)과 \(|1\rangle_L\)을 ‘손으로 직접’ 설계하는 방식을 보았습니다. 하지만 이는 매우 영리하지만 ad-hoc(임시방편적)인 방법입니다. 수백만 큐빗을 다루기 위해서는 코드를 체계적으로 설계하고, 분석하고, 분류할 수 있는 일반적인 수학적 프레임워크가 필요합니다.
그것이 바로 안정자 형식론(Stabilizer Formalism)입니다. 이 강력한 이론은 ’코드 공간’을 “특정 연산자들에 의해 고정되는(stabilized) 공간”으로 정의하며, 오류 탐지 원리를 교환/반교환 관계로 명쾌하게 설명합니다.
이 장에서는 이 안정자 형식론을 배우고, 현재 가장 유력한 양자컴퓨터 아키텍처 후보인 표면 코드(Surface Code)가 이 형식론 위에서 어떻게 작동하는지 살펴봅니다.
1. 기본 개념 (Fundamental Concepts)
파울리 그룹 (\(G_n\)): \(n\)-큐빗 시스템에 작용할 수 있는 모든 \(X, Y, Z\) 오류의 ’알파벳’입니다. \(n\)-큐빗 파울리 연산자들의 집합( \(\pm 1, \pm i\) 위상 포함)을 말합니다.
안정자 그룹 (\(S\)) (Stabilizer Group): 코드 공간을 정의하는 ‘측정 도구’ 집합입니다. \(S\)는 파울리 그룹 \(G_n\)의 부분 그룹이며, 다음 두 조건을 만족합니다.
- 교환성 (Abelian): \(S\)에 속한 모든 연산자 \(M_i, M_j\)는 서로 교환합니다. (\([M_i, M_j] = 0\))
- 비-자명성: \(-I\) (전체 위상 -1)를 포함하지 않습니다.
코드 공간 (\(V_S\)) (Code Space): 안정자 그룹 \(S\)의 모든 연산자 \(M\)에 대해 고유값 +1을 갖는 상태 벡터들의 부분공간입니다. 즉, \(S\)에 의해 ‘안정화된(고정된)’ 공간입니다. \[V_S = \{ |\psi\rangle \mid M |\psi\rangle = (+1) |\psi\rangle \quad \forall M \in S \}\] 이 \(V_S\)가 바로 우리의 ’논리적 0’과 ’논리적 1’이 거주하는, 오류로부터 보호되는 공간입니다.
안정자 생성자 (Stabilizer Generators): 거대한 그룹 \(S\) 전체를 다룰 필요 없이, \(S\)를 생성하는 최소한의 독립적인 연산자 집합 \(\langle M_1, M_2, \dots, M_g \rangle\)만 있으면 됩니다.
- 7장에서 배운 \(M_1 = Z_1 Z_2, M_2 = Z_2 Z_3\)가 바로 3큐빗 코드의 ’생성자’였습니다.
오류 탐지 (Error Detection): 안정자 형식론의 핵심입니다.
- 어떤 오류 \(E\)가 발생하여 상태가 \(|\psi'\rangle = E |\psi\rangle_L\)가 되었습니다.
- 안정자 \(M_i\)를 측정합니다.
- 만약 \(E\)가 \(M_i\)와 교환(commute)하면 (\(EM_i = M_i E\)): \(M_i |\psi'\rangle = M_i E |\psi\rangle_L = E M_i |\psi\rangle_L = E (+1) |\psi\rangle_L = +|\psi'\rangle\). (고유값 +1, 오류 탐지 못함)
- 만약 \(E\)가 \(M_i\)와 반교환(anti-commute)하면 (\(EM_i = -M_i E\)): \(M_i |\psi'\rangle = M_i E |\psi\rangle_L = -E M_i |\psi\rangle_L = -E (+1) |\psi\rangle_L = -|\psi'\rangle\). (고유값 -1, 오류 탐지 성공!)
- 결론: 오류 \(E\)는 하나 이상의 안정자 생성자와 반교환해야만 탐지됩니다.
코드 파라미터 \([[n, k, d]]\): 코드는 세 숫자로 분류됩니다.
- \(n\): 총 물리 큐빗 수.
- \(k\): 인코딩된 논리 큐빗 수. (\(k = n - g\), \(g\)는 생성자 개수)
- \(d\): 코드의 거리(Distance). 탐지/수정 불가능한 (즉, 모든 안정자와 교환하는) 가장 작은 논리 연산자의 무게(weight, 즉 작용하는 큐빗 수). \(d=2t+1\)일 때 \(t\)개의 오류를 수정할 수 있습니다.
표면 코드 (Surface Code): 안정자 코드의 가장 실용적인 예시입니다. 2D 격자(grid)에 큐빗을 배치하고, 가장 가까운 이웃(local) 큐빗들만으로 안정자 생성자를 만듭니다.
- 장점: 1) 실제 칩(2D)에 구현하기 좋음, 2) 오류 탐지에 국소적 연산만 필요함, 3) 오류율이 특정 임계값(threshold) 이하면 코드를 크게 만들수록 논리 오류율을 ‘지수적으로’ 줄일 수 있습니다. 🏆
2. 기호 및 핵심 관계식
- 파울리 그룹 (Generators): \(G_n = \langle X_1, \dots, X_n, Z_1, \dots, Z_n \rangle\) (위상 제외)
- 안정자 그룹 (Generators): \(S = \langle M_1, \dots, M_g \rangle\) (단, \(g=n-k\))
- 코드 공간 (\(V_S\)): \(M_i |\psi\rangle_L = |\psi\rangle_L\)
- 오류 탐지 조건: \(E \in G_n\). \([E, M_i] \neq 0\) (즉, 반교환)
- 오류 미탐지 조건 (논리 오류): \(E \in C(S) \setminus S\).
- \(C(S)\)는 \(S\)와 교환하는 모든 연산자의 집합(Centralizer)입니다.
- \(C(S) \setminus S\)는, 모든 안정자와 교환하지만(\([E, M_i]=0\)) 안정자 그룹 자체의 원소는 아닌(\(E \notin S\)) 연산자 \(E\)를 의미합니다. 이것이 바로 논리 연산자(\(\bar{X}, \bar{Z}\))입니다.
- 거리 \(d\): \(d = \min \{ \text{weight}(E) \mid E \in C(S) \setminus S \}\)
3. 손쉬운 예제 (Examples with Deeper Insight)
예제 1: 3-큐빗 비트 플립 코드 (7장 복습)
- 파라미터: \(n=3\) 물리 큐빗.
- 생성자 (Generators): (총 \(g=2\)개)
- \(M_1 = Z_1 Z_2 \otimes I_3\)
- \(M_2 = I_1 \otimes Z_2 Z_3\)
- 논리 큐빗 수 \(k\): \(k = n - g = 3 - 2 = 1\) 큐빗.
- 코드 공간 \(V_S\): \(Z_1 Z_2 |\psi\rangle = |\psi\rangle\) 이고 \(Z_2 Z_3 |\psi\rangle = |\psi\rangle\) 를 만족해야 합니다.
- \(|000\rangle\): \((+1)|000\rangle, (+1)|000\rangle\). (OK)
- \(|111\rangle\): \((+1)|111\rangle, (+1)|111\rangle\). (OK)
- \(|100\rangle\): \(Z_1 Z_2 |100\rangle = (-1)|100\rangle\). (탈락)
- 코드 공간 \(V_S = \text{span}\{ |000\rangle, |111\rangle \}\). 7장의 \(|0\rangle_L, |1\rangle_L\)과 정확히 일치합니다.
- 오류 탐지: \(E = X_1\) (1번 큐빗 비트 플립)
- \([M_1, E]\)? \(\to [Z_1 Z_2, X_1] = Z_1[Z_2, X_1] + [Z_1, X_1]Z_2 = 0 + (-2Z_1 X_1)Z_2 \neq 0\). (반교환)
- \([M_2, E]\)? \(\to [Z_2 Z_3, X_1] = 0\). (교환)
- 신드롬: \(M_1\)은 -1, \(M_2\)는 +1. 7장에서 (1, 0) 신드롬과 같습니다.
예제 2: 5-큐빗 “완벽한” 코드 \([[5, 1, 3]]\)
파라미터: \(n=5\), \(g=4\) \(\implies k=1\).
생성자: \(M_1=XZZXI, M_2=IXZZX, M_3=XIXZZ, M_4=ZIXIXZ\) (순환)
거리 \(d\):
- 논리 Z: \(\bar{Z} = ZZZZZ\). (모든 \(M_i\)와 교환함, weight=5)
- 논리 X: \(\bar{X} = XXXXX\). (모든 \(M_i\)와 교환함, weight=5)
💡 상세 설명 (10개의 오류, 10개의 신드롬)
이 코드는 1-큐빗 오류를 수정할 수 있습니다(\(d=3 \to t=1\)).
- 단일 큐빗 오류는 \(X_1, Y_1, Z_1, \dots, Z_5\) 로 총 \(3 \times n = 15\)가지입니다.
- \(g=4\)개의 생성자는 \(2^4 = 16\)개의 신드롬 조합을 만들 수 있습니다. (오류 없음(1) + 오류(15))
- \(E=X_1\) \(\to\) \(M_1, M_4\)와 반교환 \(\to\) 신드롬 (1,0,0,1)
- \(E=Z_1\) \(\to\) \(M_2, M_3\)와 반교환 \(\to\) 신드롬 (0,1,1,0)
- \(E=Y_1\) \(\to\) \(M_1, M_2, M_3, M_4\) 모두와 반교환 \(\to\) 신드롬 (1,1,1,1)
15개의 모든 단일 큐빗 오류가 15개의 서로 다른 고유한 신드롬을 만들어냅니다. 따라서 신드롬만 보고도 “아, 1번 큐빗에 Y 오류가 났구나”라고 정확히 진단하고 \(Y_1^\dagger\)로 복구할 수 있습니다. 15개의 오류를 15개의 증상으로 완벽히 구분하므로 ‘완벽한(perfect)’ 코드라 불립니다.
예제 3: 표면 코드 (Surface Code) - [[9, 1, 3]] (단순화)
상황: \(3 \times 3\) 격자에 큐빗을 배치합니다. (실제로는 \(n=13\) 큐빗 \([[13, 1, 3]]\)이 더 표준적이나, \(n=9\)로 개념 설명)
큐빗: 노드(node)에 9개 큐빗 배치 (1~9)
안정자 생성자 (\(g=n-k=9-1=8\)개):
- 면(Plaquette) 안정자 (\(Z\)): 4개의 면. \(M_1=Z_1 Z_2 Z_4 Z_5\), \(M_2=Z_2 Z_3 Z_5 Z_6\), …
- 정점(Vertex) 안정자 (\(X\)): 4개의 내부 정점. \(M_5=X_1 X_2 X_4 X_5\) … (면과 정점을 다르게 정의할 수도 있음. 여기서는 토릭 코드를 단순화)
💡 상세 설명 (오류 감지: Anyons)
- 오류 없음: 모든 면(\(Z\))과 정점(\(X\))의 고유값은 +1입니다. “진공 상태”.
- \(X_5\) 오류 발생 (가운데 5번 큐빗에 \(X\) 오류):
- \(X_5\)는 \(X\) 안정자(정점)와는 교환합니다. (\([X_5, X_i X_j X_k X_5] = 0\))
- \(X_5\)는 \(Z\) 안정자(면)와는 반교환합니다.
- \(X_5\)는 4개의 면(\(M_1, M_2, M_3, M_4\)) 모두에 속해있습니다.
- 신드롬: \(M_1, M_2, M_3, M_4\)의 고유값이 모두 -1로 바뀝니다! 4개의 면에 ‘결함’(anyons)이 나타납니다.
- \(Z_5\) 오류 발생:
- \(Z_5\)는 \(Z\) 안정자와 교환합니다.
- \(Z_5\)는 자신을 포함하는 \(X\) 안정자와 반교환합니다.
- 신드롬: 4개의 정점(\(X\) 안정자)에 결함이 나타납니다.
- 오류 체인(Error Chain): \(E = Z_4 Z_5\) (4번, 5번 큐빗에 \(Z\) 오류)
- \(Z_4 Z_5\)는 \(X_1 X_2 X_4 X_5\) (4, 5번 포함) 및 \(X_4 X_5 X_7 X_8\) (4, 5번 포함)와는 교환합니다. (Z가 X와 2번씩 만나므로)
- \(Z_4 Z_5\)는 \(X\) 안정자 중 \(X_1 X_4 X_2 X_5\)와 \(X_2 X_3 X_5 X_6\)…
- (정정) \(Z_4 Z_5\) 오류는 \(X\) 안정자 중 오류 체인의 끝점에 있는 안정자들만(-1로) 바꿉니다. 중간에 있는 안정자는 \(Z\)를 2개 만나서 교환(+1)됩니다.
- 신드롬: 우리는 오류 자체(\(Z_4, Z_5\))를 보는 것이 아니라, 오류 체인의 ’끝점’에 나타난 두 개의 ’결함’만 봅니다.
- 논리적 오류: \(E = Z_1 Z_4 Z_7\) (1-4-7을 잇는 \(Z\) 오류 체인)
- 이 체인은 격자의 한쪽 끝에서 반대쪽 끝까지 이어집니다. ’끝점’이 격자 외부에 있으므로, 내부의 모든 \(X\) 안정자와 교환합니다.
- 신드롬은 (0, 0, …, 0)입니다. 오류가 탐지되지 않습니다.
- 이것이 바로 \(\bar{Z}\) 논리 연산자입니다. 코드의 거리 \(d\)는 이 가장 짧은 논리 연산자의 길이(이 경우 3)입니다. \(\implies [[9, 1, 3]]\) 코드.
4. 연습문제
- \([n, k, d]\) 파라미터: 7장의 3큐빗 위상 플립 코드(\(|+++\rangle, |---\rangle\))의 안정자 생성자는 무엇이며, \([[n, k, d]]\) 파라미터는 무엇입니까?
- 안정자 교환: 5큐빗 코드의 \(M_1=XZZXI\)와 \(M_2=IXZZX\)가 서로 교환하는지(\([M_1, M_2]=0\)) 확인하십시오. (힌트: \(XZ = -ZX, ZZ=I, XX=I\))
- 거리(Distance): 9큐빗 쇼어 코드(\([[9, 1, 3]]\))는 \(t\)개의 오류를 수정할 수 있습니다. \(t\)는 얼마입니까?
- 표면 코드 신드롬: \(3 \times 3\) 표면 코드(예제 3)에서 \(X_2\) 오류(2번 큐빗 \(X\) 오류)가 발생했습니다. 어떤 종류의 안정자(X 또는 Z)가, 그리고 몇 개가 -1 고유값을 갖게 될지 예측하십시오.
5. 해설
- 7장 예제 2에서 위상 플립 코드는 \(X_1 X_2\)와 \(X_2 X_3\)로 신드롬을 측정했습니다.
- 생성자: \(M_1 = X_1 X_2\), \(M_2 = X_2 X_3\).
- \(n=3, g=2 \implies k=n-g=1\).
- 논리 연산자: \(\bar{Z} = Z_1 Z_2 Z_3\), \(\bar{X} = X_1 X_2 X_3\) (혹은 \(X_1\)). ( \(\bar{X}=X_1 X_2 X_3\), \([ \bar{X}, M_1] = [X_1 X_2 X_3, X_1 X_2] = X_3(X_1 X_2)(X_1 X_2) = X_3 \neq 0\). 수정: \(\bar{X} = X_1 X_2 X_3\)가 아님. \(\bar{X} = X_1\).)
- 논리 연산자 \(\bar{X} = X_1 X_2 X_3\), \(\bar{Z} = Z_1 Z_2 Z_3\). ( \(X\)끼리, \(Z\)끼리 교환) 수정: \(\bar{Z} = Z_1 Z_2 Z_3\), \(\bar{X} = X_1\). \([\bar{X}, M_1] = [X_1, X_1 X_2] = 0\). \([\bar{X}, M_2] = [X_1, X_2 X_3] \neq 0\).
- 재수정: \(\bar{X} = X_1 X_2 X_3\), \(\bar{Z} = Z_1 Z_2 Z_3\). (비트 플립 코드: \(\bar{Z}=Z_1 Z_2 Z_3, \bar{X}=X_1 X_2 X_3, d=3\). 위상 플립 코드: \(\bar{Z}=Z_1 Z_2 Z_3, \bar{X}=X_1 X_2 X_3, d=3\).)
- 파라미터는 \([[3, 1, 3]]\) 입니다. (두 코드 모두)
- \([M_1, M_2] = [XZZXI, IXZZX]\). 겹치는 부분은 2, 3, 4번 큐빗입니다.
- 2번 큐빗: \([Z, X] \neq 0\) (반교환)
- 3번 큐빗: \([Z, Z] = 0\) (교환)
- 4번 큐빗: \([X, Z] \neq 0\) (반교환)
- 총 2번(짝수)의 반교환이 일어나므로, \(M_1 M_2 = (-1)^2 M_2 M_1 = M_2 M_1\). 따라서 \([M_1, M_2]=0\) (교환합니다).
- \(d = 2t+1\). \(3 = 2t+1 \implies 2t=2 \implies t=1\). 9큐빗 쇼어 코드는 1개의 임의의 단일 큐빗 오류를 수정할 수 있습니다.
- \(X_2\) 오류는 \(X\) 타입 오류입니다.
- \(X\) 오류는 \(Z\) 안정자와 반교환합니다. \(X\) 안정자와는 교환합니다.
- 2번 큐빗이 포함된 면(Plaquette) 안정자(\(Z\) 타입)는 \(M_1=Z_1 Z_2 Z_4 Z_5\)와 \(M_2=Z_2 Z_3 Z_5 Z_6\)입니다.
- 따라서 \(M_1\)과 \(M_2\)가 -1 고유값을 갖게 됩니다. (총 2개의 Z-안정자)